package template.smarty4j.statement;

import static org.objectweb.asm.Opcodes.*;
import template.smarty4j.Analyzer;
import template.smarty4j.MethodVisitorProxy;
import template.smarty4j.Node;
import template.smarty4j.Template;
import template.smarty4j.TemplateWriter;
import template.smarty4j.VariableManager;

/**
 * 文本输出语句，简单的将模板文件中的文本进行输出。
 * 
 * @version 1.1.0, 2015/05/16
 * @author Ouyang Xianwei
 * @since Smarty 1.1
 */
public class TextStatement extends Node {

	/** 需要输出的文本 */
	private String text;

	/** 字节流缓存索引号 */
	private int index;

	public TextStatement(Analyzer analyzer, String text) {
		if (text.length() > 0) {
			this.text = text;
			this.index = analyzer.getBytesIndex(text);
		}
	}

	/**
	 * 获取需要输出的文本。
	 * 
	 * @return 需要输出的文本
	 */
	public String getText() {
		return text == null ? "" : text;
	}
	
	@Override
	public void parse(MethodVisitorProxy mw, int local, VariableManager vm) {
		if (text != null) {
			mw.visitVarInsn(ALOAD, WRITER);
			mw.visitLdcInsn(text);
			mw.visitVarInsn(ALOAD, TEMPLATE);
			mw.visitLdcInsn(index);
			mw.visitMethodInsn(INVOKEVIRTUAL, Template.NAME, "getTextBytes", "(I)[B");
			mw.visitMethodInsn(INVOKEVIRTUAL, TemplateWriter.NAME, "write", "(Ljava/lang/String;[B)V");
		}
	}
}